package q1.project.core.result;

import com.fasterxml.jackson.annotation.JsonInclude;

/** 统一返回结果 */
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Result<T> {

  private Integer code;
  private String message;
  private T data;

  public Result() {}

  public Result(Integer code, String message, T data) {
    this.code = code;
    this.message = message;
    this.data = data;
  }

  public static <T> Result<T> success() {
    return new Result<>(1, "操作成功", null);
  }

  public static <T> Result<T> success(T data) {
    return new Result<>(1, "操作成功", data);
  }

  public static <T> Result<T> success(String message, T data) {
    return new Result<>(1, message, data);
  }

  public static <T> Result<T> error() {
    return new Result<>(0, "操作失败", null);
  }

  public static <T> Result<T> error(String message) {
    return new Result<>(0, message, null);
  }

  public static <T> Result<T> error(Integer code, String message) {
    return new Result<>(code, message, null);
  }

  // Getters and Setters
  public Integer getCode() {
    return code;
  }

  public void setCode(Integer code) {
    this.code = code;
  }

  public String getMessage() {
    return message;
  }

  public void setMessage(String message) {
    this.message = message;
  }

  public T getData() {
    return data;
  }

  public void setData(T data) {
    this.data = data;
  }
}
